#include "musicplayer.h"
#include "ui_musicplayer.h"
#include <QDebug>
#include <QMouseEvent>
#include <QGraphicsDropShadowEffect>
#include <QJsonArray>
#include <QJsonObject>
#include <QFileDialog>
#include <QMediaPlaylist>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMessageBox>
#include <QSystemTrayIcon>
#include <QMenu>

#include "btform.h"
#include "recform.h"
#include "volumetool.h"
#include "musiclist.h"
#include "lrcpage.h"

MusicPlayer::MusicPlayer(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MusicPlayer)
    , currentIndex(-1)
{
    ui->setupUi(this);
    initUi();
    initDB();
    initData();
    initPlayer();
}

MusicPlayer::~MusicPlayer()
{
    delete ui;
}

void MusicPlayer::initUi()
{
    // 不支持最大化
    ui->max->setEnabled(false);
    // 设置程序的图标
    this->setWindowIcon(QIcon(":/image/qqMusic.png"));
    // 设置窗口无标题化
    this->setWindowFlag(Qt::FramelessWindowHint);
    // 设置系统托盘
    QSystemTrayIcon* systemIcon = new QSystemTrayIcon(this);
    systemIcon->setIcon(QIcon(":/image/qqMusic.png"));
    systemIcon->show();
    // 给托盘添加菜单
    QMenu* menu = new QMenu(this);
    menu->addAction("显示", this, &QWidget::showNormal);
    menu->addAction("退出", this, &MusicPlayer::onMusicPlayerQuit);
    systemIcon->setContextMenu(menu);

    // 添加窗口阴影效果
    // 首先要设置窗口的透明化
    this->setAttribute(Qt::WA_TranslucentBackground);
    // 添加阴影
    QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(this);
    shadow->setOffset(0,0);  // 设置在左上角，就会围在窗口的四周
    shadow->setColor(Qt::black);  // 设置颜色
    shadow->setBlurRadius(10);  // 设置圆角
    this->setGraphicsEffect(shadow);

    // 初始化 bodyLeft 的图标
    ui->rec->setIconAndText(":/image/rec.png", "推荐", 0);
    ui->audio->setIconAndText(":/image/audio.png", "电台", 1);
    ui->music->setIconAndText(":/image/music.png", "音乐馆", 2);
    ui->like->setIconAndText(":/image/like.png", "我喜欢", 3);
    ui->local->setIconAndText(":/image/local.png", "本地下载", 4);
    ui->recent->setIconAndText(":/image/recent.png", "最近播放", 5);

    // 连接槽函数
    connectSignalsAndSlots();

    // 设置默认的动画，以及默认的页面
    // 要想访问 btForm 的 ui 文件是做不到的，所以只能通过公有函数进行访问
    ui->local->showAnimation();
    ui->stackedWidget->setCurrentIndex(4);

    // 初始化推荐页面的两个 RecForm
    // 初始化随机数种子
    srand(time(NULL));
    ui->recMusicWidget->initRecFormUi(randomRec(), 1);  // "今日推荐" 是一行
    ui->recSupplyWidget->initRecFormUi(randomRec(), 2);  // "你的专属音乐补给站" 是两行

    // 设置 CommonPage 的封面图片和文字，并设置页面的类型 PageType
    ui->likePage->setCommonPageTextAndCover("我喜欢", ":/CommonPage/common1.jpg");

    ui->localPage->setCommonPageTextAndCover("本地音乐", ":/CommonPage/common2.jpg");

    ui->recentPage->setCommonPageTextAndCover("最近播放", ":/CommonPage/common3.jpg");

    // 初始化播放控制区的图标
    ui->play->setIcon(QIcon(":/image/pause.png"));
    ui->playMode->setIcon(QIcon(":/image/linePlay.png"));

    // 创建 VolumeTool 对象
    volume = new VolumeTool(this);

    // 创建 LrcPage 歌词界面对象
    lrcPage = new LrcPage(this);
    lrcPage->hide();
    lrcPage->move(10,10);
    animation = new QPropertyAnimation(lrcPage, "geometry");
    animation->setDuration(250);
    animation->setStartValue(QRect(10,10 + lrcPage->height(),lrcPage->width(), lrcPage->height()));
    animation->setEndValue(QRect(10,10,lrcPage->width(), lrcPage->height()));
}

void MusicPlayer::initDB()
{
    // 1. 导入数据库驱动
    sqlite = QSqlDatabase::addDatabase("QSQLITE");
    // 2. 设置数据库的名称：接下来要创建的数据库的名称
    sqlite.setDatabaseName("musicDB.db");
    // 3. 如果数据库存在，就直接打开；如果不存在，就先创建后打开
    if(!sqlite.open())
    {
        QMessageBox::critical(this, "MusicPlayer", "创建数据库失败");
        return;
    }
    qDebug() << "创建数据库成功！";
    // 4. 创建表
    QString sql("create table if not exists musicInfo ( \
                    id integer primary key autoincrement, \
                    musicId integer unique, \
                    musicName varchar(256), \
                    musicSinger varchar(256), \
                    musicAlbum varchar(256), \
                    musicUrl varchar(256), \
                    duration bigint, \
                    isLike integer, \
                    isHistory integer)");
    QSqlQuery query;
    if(!query.exec(sql))
    {
        QMessageBox::critical(this, "MusicPlayer", "初始化失败！");
        return;
    }
    qDebug() << "初始化成功！";
}

void MusicPlayer::initData()
{
    // 读取数据到musicList中
    musicList.readFromDB();
    // 刷新界面
    ui->likePage->setPageType(PageType::LIKE);
    ui->likePage->reFresh(musicList);

    ui->localPage->setPageType(PageType::LOCAL);
    ui->localPage->reFresh(musicList);

    ui->recentPage->setPageType(PageType::RECENT);
    ui->recentPage->reFresh(musicList);
}

void MusicPlayer::initPlayer()
{
    // 初始化 QMediaPlayer 和 list 对象，用来进行播放音乐控制与列表控制
    player = new QMediaPlayer(this);
    playlist = new QMediaPlaylist(this);
    // 设置默认的播放模式：列表循环播放
    playlist->setPlaybackMode(QMediaPlaylist::Loop);
    // 将播放列表设置到播放媒体对象中
    player->setPlaylist(playlist);
    // 设置默认的音量大小为 20%
    player->setVolume(20);

    // 关联当播放的歌曲发生改变的时候的槽函数，为了实现最近播放功能
    connect(playlist, &QMediaPlaylist::currentIndexChanged, this, &MusicPlayer::onCurrentIndexChanged);

    // 关联 VolumnTool 传过来的实现静音非静音切换的槽函数
    connect(volume, &VolumeTool::setMuted, this, &MusicPlayer::onSetMuted);

    // 关联 VolumnTool 传过来的实现音量调节的槽函数
    connect(volume, &VolumeTool::setVolume, this, &MusicPlayer::onSetVolume);

    // 关联当歌曲切换的时候总时长改变的槽函数
    connect(player, &QMediaPlayer::durationChanged, this, &MusicPlayer::onDurationChanged);

    // 关联当歌曲播放过程中的时间推进改变的槽函数
    connect(player, &QMediaPlayer::positionChanged, this, &MusicPlayer::onPositionChanged);

    // 关联点击了进度条改变歌曲播放的进度之后，同步歌曲的正在播放的时间的槽函数
    connect(ui->progressBar, &MusicSlider::MusicSliderChanged, this, &MusicPlayer::onMusicSliderChanged);

    // 关联当播放的歌曲发生改变的时候，显示的歌曲名称和歌手改变的槽函数
    connect(player, &QMediaObject::metaDataAvailableChanged, this, &MusicPlayer::onMetaDataAvailableChanged);
}

void MusicPlayer::connectSignalsAndSlots()
{
    // 关联 btForm 和处理该信号的槽函数
    connect(ui->rec, &BtForm::btClick, this, &MusicPlayer::onBtFormClicked);
    connect(ui->audio, &BtForm::btClick, this, &MusicPlayer::onBtFormClicked);
    connect(ui->music, &BtForm::btClick, this, &MusicPlayer::onBtFormClicked);
    connect(ui->like, &BtForm::btClick, this, &MusicPlayer::onBtFormClicked);
    connect(ui->local, &BtForm::btClick, this, &MusicPlayer::onBtFormClicked);
    connect(ui->recent, &BtForm::btClick, this, &MusicPlayer::onBtFormClicked);

    // 关联处理三个界面是否点击收藏喜欢的槽函数
    connect(ui->likePage, &CommonForm::pageLikeRefresh, this, &MusicPlayer::onPageLikeClicked);
    connect(ui->localPage, &CommonForm::pageLikeRefresh, this, &MusicPlayer::onPageLikeClicked);
    connect(ui->recentPage, &CommonForm::pageLikeRefresh, this, &MusicPlayer::onPageLikeClicked);

    // 关联 CommonForm 的播放全部 playAll 信号的槽函数
    connect(ui->likePage, &CommonForm::playAll, this, &MusicPlayer::onPlayAllClicked);
    connect(ui->localPage, &CommonForm::playAll, this, &MusicPlayer::onPlayAllClicked);
    connect(ui->recentPage, &CommonForm::playAll, this, &MusicPlayer::onPlayAllClicked);

    // 关联 CommonForm 的双击歌曲的信号的槽函数
    connect(ui->likePage, &CommonForm::playByDoubleClicked, this, &MusicPlayer::onPlayByDoubleClicked);
    connect(ui->localPage, &CommonForm::playByDoubleClicked, this, &MusicPlayer::onPlayByDoubleClicked);
    connect(ui->recentPage, &CommonForm::playByDoubleClicked, this, &MusicPlayer::onPlayByDoubleClicked);
}

QJsonArray MusicPlayer::randomRec()
{
    // 随机的推荐文本和图片，存入一个数组中
    QVector<QString> imagePathVec;
    // 可以使用流插入插入所有的图片
    imagePathVec << ":/rec1/recPage1.jpg" << ":/rec1/recPage2.jpg" << ":/rec1/recPage3.jpg" << ":/rec1/recPage4.jpg"
                 << ":/rec1/recPage5.jpg" << ":/rec1/recPage6.jpg" << ":/rec1/recPage7.jpg" << ":/rec1/recPage8.jpg"
                 << ":/rec1/recPage9.jpg" << ":/rec1/recPage10.jpg" << ":/rec1/recPage11.jpg" << ":/rec1/recPage12.jpg"
                 << ":/rec1/recPage13.jpg" << ":/rec1/recPage14.jpg" << ":/rec1/recPage15.jpg" << ":/rec1/recPage16.jpg"
                 << ":/rec1/recPage17.jpg" << ":/rec1/recPage18.jpg" << ":/rec1/recPage19.jpg" << ":/rec1/recPage20.jpg"
                 << ":/rec1/recPage21.jpg" << ":/rec1/recPage22.jpg" << ":/rec1/recPage23.jpg" << ":/rec1/recPage24.jpg"
                 << ":/rec1/recPage25.jpg" << ":/rec1/recPage26.jpg" << ":/rec1/recPage27.jpg" << ":/rec1/recPage28.jpg"
                 << ":/rec1/recPage29.jpg" << ":/rec1/recPage30.jpg" << ":/rec1/recPage31.jpg" << ":/rec1/recPage32.jpg"
                 << ":/rec1/recPage33.jpg" << ":/rec1/recPage34.jpg" << ":/rec1/recPage35.jpg" << ":/rec1/recPage36.jpg";
    // 使用 std::random_shuffle 随机打乱数组顺序
    // 但是打乱数组顺序如果不设置随机数种子的话，那么每次启动程序时打乱数组顺序的方式都是一样的，达不成我们想要的效果
    std::random_shuffle(imagePathVec.begin(), imagePathVec.end());
    QJsonArray objArray;
    for(int i = 0;i < imagePathVec.size();i++)
    {
        QJsonObject obj;
        obj.insert("image", imagePathVec[i]);
        obj.insert("text", QString("推荐-%1").arg(i, 3, 10, QChar('0')));
        objArray.append(obj);
    }
    return objArray;
}

void MusicPlayer::on_quit_clicked()
{
    this->hide();
}

void MusicPlayer::onBtFormClicked(int pageId)
{
    // 在每次点击的时候，获取其所有的 BtForm 类型的子控件，如果是目前点击的控件，那么就将这个控件设置成绿色，其他的都设置成背景颜色
    QList<BtForm*> btFormList = this->findChildren<BtForm*>();
    for(auto child : btFormList)
    {
        // 遍历所有的子控件，如果这个子控件的 pageId 是不是目前点击的 pageId，就将其设置成背景颜色
        if(child->getPageId() != pageId) child->clearBackgroundColor();
    }
    // 处理点击的事件的槽函数，只需要更改对应的页面即可
    ui->stackedWidget->setCurrentIndex(pageId);
}

void MusicPlayer::mouseMoveEvent(QMouseEvent *event)
{
    // 鼠标移动，要保证鼠标是在执行拖拽动作，即鼠标的左键不能松开，所以可以使用 QMouseEvent::buttons 来获取鼠标的状态
    if(event->buttons() == Qt::LeftButton)
    {
        this->move(event->globalPos() - dragPosition);
        return;
    }
    // 我们只关心鼠标左键实现拖拽，而鼠标别的键位的执行就交给父类去执行
    QWidget::mouseMoveEvent(event);
}

void MusicPlayer::mousePressEvent(QMouseEvent *event)
{
    // 鼠标按下，先获取鼠标相对于窗口左上角的位置
    if(event->button() == Qt::LeftButton)
    {
        // geometry() 获取的是窗口矩形，topLeft 就获取到了它左上角的坐标位置
        dragPosition = event->globalPos() - this->geometry().topLeft();
        return;
    }
    // 我们只关心鼠标左键实现拖拽，而鼠标别的键位的执行就交给父类去执行
    QWidget::mouseMoveEvent(event);
}

void MusicPlayer::on_volume_clicked()
{
    // 点击音量按钮，弹出音量调节窗口
    // 如果不设置位置，那么默认会设置到屏幕的左上角，所以现在要调整到音量的上面的位置
    // 首先获取音量的左上角的全局位置
    QPoint point = ui->volume->mapToGlobal(QPoint(0,0));
    // 计算需要移动到的位置
    QPoint movePoint = point - QPoint(volume->width()/2, volume->height());
    // 移动
    volume->move(movePoint);
    volume->show();
}

void MusicPlayer::on_addLocal_clicked()
{
    // 点击 添加本地音乐 的按钮，弹出 "打开" 的文件对话框 QFileDialog
    QFileDialog file(this);
    file.setWindowTitle("添加本地下载音乐");
    QDir dir(QDir::currentPath());
    dir.cdUp();
    QString path = dir.path();
    path += "/MyMusicPlayer";
    // 设置默认打开的路径进去
    file.setDirectory(path);
    // 设置一次可以打开多个，也就是支持全选 ctrl+A
    file.setFileMode(QFileDialog::ExistingFiles);
    // 通过文件后缀
    // file.setNameFilter("代码文件(*.c *.cc *.cpp *.h)");

    // 通过文件的MIME类型来过滤
    QStringList mime;
//    mime << "image/jepg"  // 显示 *.jepg *.png *.jpg 的所有关于图片的文件
//         << "image.png"  // 显示 *.png 的图片
//         << "application/octet-stream";  // 显示所有文件，相当于没有设置 ALL Files(*)

//    mime << "audio/mpeg"   // 适用于mp3格式的音频文件
//         << "audio/flac"   // 适用于无损音频压缩格式的文件
//         << "audio/wav";   // 适用于wav格式的歌曲文件

    mime << "application/octet-stream";
    // 获取所有选择的文件的路径
    // 开启，以模态对话框的形式
    if(file.exec() == QDialog::Accepted)  // 如果点击了 打开 按钮，会获取所有选择的文件的路径
    {
        QList<QUrl> urlList = file.selectedUrls();
        // urlList 内部存放的是刚刚选中的文件的 url 路径
        // 需要将文件信息填充到本地下载
        musicList.addMusicsToList(urlList);
        // 更改到本地下载的界面
        ui->stackedWidget->setCurrentIndex(4);
        // 将这些歌曲更新到本地下载的界面上
        ui->localPage->reFresh(musicList);
        // 将 localPage 的歌曲都添加到播放列表中
        ui->localPage->addMusicToPlaylist(musicList, playlist);
    }
}

void MusicPlayer::onPageLikeClicked(bool isLike, const QString &musicId)
{
    // 首先修改 music 的状态
    auto it = musicList.findMusicByMusicId(musicId);
    // 找到了，进行处理
    if(it != musicList.end())
    {
        it->setIsLike(isLike);
    }
    // 更新 page 页面的歌曲列表
    ui->likePage->reFresh(musicList);
    ui->localPage->reFresh(musicList);
    ui->recentPage->reFresh(musicList);
}

void MusicPlayer::on_play_clicked()
{
//    // 导入音乐
//    player->setMedia(musicList.begin()->getMusicUrl());  // 可以使用 url 来构造 QMediaContent
//    // 播放音乐
//    player->play();

    // 根据当前按钮的状态设置播放暂停功能
    if(player->state() == QMediaPlayer::PlayingState)
    {
        // 当前正在播放，点击后应该暂停
        player->pause();
        ui->play->setIcon(QIcon(":/image/pause.png"));
    }
    else if(player->state() == QMediaPlayer::PausedState)
    {
        // 当前已经暂停播放，点击后应该继续播放
        player->play();
        ui->play->setIcon(QIcon(":/image/play.png"));
    }
    else if(player->state() == QMediaPlayer::StoppedState)
    {
        // 当前是停止播放状态，点击后直接播放
        player->play();
        ui->play->setIcon(QIcon(":/image/play.png"));
    }
}

void MusicPlayer::on_playUp_clicked()
{
    // 1. 更改成上一曲
    playlist->previous();
    // 2. 设置播放的图标，自动开始播放
    ui->play->setIcon(QIcon(":/image/play.png"));
    // 3. 开始播放
    player->play();
}

void MusicPlayer::on_playDown_clicked()
{
    // 1. 更改成下一曲
    playlist->next();
    // 2. 设置播放的图标，自动开始播放
    ui->play->setIcon(QIcon(":/image/play.png"));
    // 3. 开始播放
    player->play();
}

void MusicPlayer::on_playMode_clicked()
{
    // 顺序播放 --> 随机播放 --> 单曲循环
    if(playlist->playbackMode() == QMediaPlaylist::Loop)
    {
        // 随机播放
        playlist->setPlaybackMode(QMediaPlaylist::Random);
        ui->playMode->setToolTip("随机播放");
        ui->playMode->setIcon(QIcon(":/image/randomPlay.png"));
    }
    else if(playlist->playbackMode() == QMediaPlaylist::Random)
    {
        // 单曲循环
        playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
        ui->playMode->setToolTip("单曲循环");
        ui->playMode->setIcon(QIcon(":/image/repeatOnce.png"));
    }
    else if(playlist->playbackMode() == QMediaPlaylist::CurrentItemInLoop)
    {
        // 顺序播放
        playlist->setPlaybackMode(QMediaPlaylist::Loop);
        ui->playMode->setToolTip("顺序播放");
        ui->playMode->setIcon(QIcon(":/image/linePlay.png"));
    }
    else
    {
        qDebug() << "暂不支持";
    }
}

void MusicPlayer::onPlayAllClicked(PageType type)
{
    // 获取当前需要播放的页面是哪一个
    CommonForm* page;
    switch(type)
    {
        case LIKE:
            page = ui->likePage;
            break;
        case LOCAL:
            page = ui->localPage;
            break;
        case RECENT:
            page = ui->recentPage;
            break;
        default:
            qDebug() << "未知的页面";
    }
    // 播放 page 中的所有音乐
    playAllMusicOfPage(page);
}

void MusicPlayer::playAllMusicOfPage(CommonForm *page, int index)
{
    currentPage = page;
    // 1. 清空当前播放列表的歌曲
    playlist->clear();
    // 2. 将当前页面的所有歌曲添加进播放列表中
    page->addMusicToPlaylist(musicList, playlist);
    // 3. 设置从 index 开始播放歌曲
    playlist->setCurrentIndex(index);
    // 4. 设置 play 的图标
    ui->play->setIcon(QIcon(":/image/play.png"));
    // 5. 开始播放
    player->play();
}

void MusicPlayer::onPlayByDoubleClicked(PageType type, int row)
{
    // 获取当前需要播放的页面是哪一个
    CommonForm* page;
    switch(type)
    {
        case LIKE:
            page = ui->likePage;
            break;
        case LOCAL:
            page = ui->localPage;
            break;
        case RECENT:
            page = ui->recentPage;
            break;
        default:
            qDebug() << "未知的页面";
    }
    // 播放双击的音乐
    playByDoubleClickedMusicOfPage(page, row);
}

void MusicPlayer::playByDoubleClickedMusicOfPage(CommonForm *page, int index)
{
    currentPage = page;
    // 1. 清空当前播放列表的歌曲
    playlist->clear();
    // 2. 将当前页面的所有歌曲添加进播放列表中
    page->addMusicToPlaylist(musicList, playlist);
    // 3. 播放这个列表中的第 row 首歌曲
    playlist->setCurrentIndex(index);
    // 4. 设置 play 的图标
    ui->play->setIcon(QIcon(":/image/play.png"));
    // 5. 播放音乐
    player->play();
}

void MusicPlayer::onCurrentIndexChanged(int index)
{
    currentIndex = index;
    // 获取当前页面正在播放的歌曲的 musicId
    QString musicId = currentPage->getMusicIdByIndex(index);
    // 找到 musicId 对应的 Music 对象
    auto it = musicList.findMusicByMusicId(musicId);
    if(it != musicList.end())
    {
        // 找到了，设置为历史播放过
        it->setIsHistory(true);
    }
    // 刷新一下最近播放的界面
    ui->recentPage->reFresh(musicList);
}

void MusicPlayer::onSetMuted(bool isMuted)
{
    player->setMuted(isMuted);
}

void MusicPlayer::onSetVolume(int volume)
{
    player->setVolume(volume);
}

void MusicPlayer::onDurationChanged(qint64 duration)
{
    totalTime = duration;
    // 总时长切换  分:秒   duration 是毫秒总数
    // 分钟：duration/1000/60
    // 秒钟：duration/1000%60
    ui->totalTime->setText(QString("%1:%2").arg(duration/1000/60, 2, 10, QChar('0'))
                                           .arg(duration/1000%60, 2, 10, QChar('0')));
}

void MusicPlayer::onPositionChanged(qint64 position)
{
    // 同步歌曲的播放的时间
    ui->currentTime->setText(QString("%1:%2").arg(position/1000/60, 2, 10, QChar('0'))
                                             .arg(position/1000%60, 2, 10, QChar('0')));
    // 同步歌曲的播放进度
    ui->progressBar->setStep(position / (float)totalTime);

    // 同步歌词的播放进度
    if(currentIndex >= 0)
        lrcPage->showLrcWordLine(position);
}

void MusicPlayer::onMusicSliderChanged(float ration)
{
    qint64 duration = totalTime * ration;
    ui->currentTime->setText(QString("%1:%2").arg(duration/1000/60, 2, 10, QChar('0'))
                                             .arg(duration/1000%60, 2, 10, QChar('0')));
    // 同步到歌曲的播放时间
    player->setPosition(duration);
}

void MusicPlayer::onMetaDataAvailableChanged()
{
    // 歌曲名称和歌手信息都直接从 Music 对象中获取
    QString musicId = currentPage->getMusicIdByIndex(currentIndex);
    auto it = musicList.findMusicByMusicId(musicId);
    QString musicName = "未知歌曲";
    QString musicSinger = "未知歌手";
    if(it != musicList.end())
    {
        musicName = it->getMusicName();
        musicSinger = it->getMusicSinger();
    }
    // 设置到 text 中
    ui->musicName->setText(musicName);
    ui->musicSinger->setText(musicSinger);

    // 设置到 lrc 界面中
    lrcPage->setMusicName(musicName);
    lrcPage->setMusicSinger(musicSinger);

    // 获取歌曲的封面:这是一个 QImage 对象
    QVariant coverImage = player->metaData("ThumbnailImage");
    // 如果是有效的
    if(coverImage.isValid())
    {
        QImage image = coverImage.value<QImage>();
        ui->musicCover->setPixmap(QPixmap::fromImage(image));
    }
    else
    {
        // 没有封面，可以设置默认的封面
        ui->musicCover->setPixmap(QPixmap(":/image/qqMusic.png"));
    }
    // 自适应图片大小
    ui->musicCover->setScaledContents(true);

    // 解析当前的 lrc 歌词文件
    if(it != musicList.end())
    {
        // 获取 lrc 歌词的路径
        QString lrcPath = it->getLrcFilePath();
        // 解析歌词文件
        lrcPage->parseLrcFile(lrcPath);
    }
}

void MusicPlayer::on_lrcWord_clicked()
{
    lrcPage->show();
    animation->start();
}

void MusicPlayer::on_skin_clicked()
{
    QMessageBox::information(this, "MusicPlayer", "换肤功能小哥哥正在支持中...");
}

void MusicPlayer::on_min_clicked()
{
    // 最小化
    this->showMinimized();
}

void MusicPlayer::onMusicPlayerQuit()
{
    // 关闭窗口之前将音乐信息写入数据库中
    musicList.writeToDB();
    // 断开与数据库的连接
    sqlite.close();

    this->close();
}
